﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace Sige
{
    public class Persona
    {
        private string tipodocumento;
        private string documento;
        private string nombre;
        private string apellido;
        private string direccion;
        private string codigopostal;
        private string telefono;
        private string email;
        private DateTime fechanacimiento;
        private string codigonacionalidad;
        private string codigonivelestudio;

        //CONSTRUCTOR "VACÍO": NO NECESITO CARGAR NINGÚN DATO INICIAL...
        public Persona()
        {
        }

        //CONSTRUCTOR CON PARÁMETROS:
        public Persona(string p_tipodocumento, string p_documento, string p_nombre,
        string p_apellido, string p_direccion, string p_codigopostal, string p_telefono,
        string p_email, DateTime p_fechanacimiento, string p_codigonacionalidad,
        string p_codigonivelestudio)
        {
            tipodocumento = p_tipodocumento;
            documento = p_documento;
            nombre = p_nombre;
            apellido = p_apellido;
            direccion = p_direccion;
            codigopostal = p_codigopostal;
            telefono = p_telefono;
            email = p_email;
            fechanacimiento = p_fechanacimiento;
            codigonacionalidad = p_codigonacionalidad;
            codigonivelestudio = p_codigonivelestudio;
        }
        //PROPIEDADES PARA MÉTODOS GET/SET:

        public String TipoDocumento
        {
            get { return tipodocumento; }
            set { tipodocumento = value; }
        }

        public String Documento
        {
            get { return documento; }
            set { documento = value; }
        }

        public String Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }

        public String Apellido
        {
            get { return apellido; }
            set { apellido = value; }
        }

        public String Direccion
        {
            get { return direccion; }
            set { direccion = value; }
        }

        public String CodigoPostal
        {
            get { return codigopostal; }
            set { codigopostal = value; }
        }

        public String Telefono
        {
            get { return telefono; }
            set { telefono = value; }
        }

        public String Email
        {
            get { return email; }
            set { email = value; }
        }

        public DateTime FechaNacimiento
        {
            get { return fechanacimiento; }
            set { fechanacimiento = value; }
        }

        public String CodigoNacionalidad
        {
            get { return codigonacionalidad; }
            set { codigonacionalidad = value; }
        }

        public String CodigoNivelEstudio
        {
            get { return codigonivelestudio; }
            set { codigonivelestudio = value; }
        }

        public bool Persona_Existente(string coddoc, string nrodoc)
        {
            bool existe = false;
            string consulta = "Select * from personas where (tipodocumento = '" +
                coddoc + "') and (documento = '" + nrodoc + "')";
            Accesoadatos datos = new Accesoadatos();
            SqlConnection cn = datos.ObtenerConexion(datos.getruta());
            SqlCommand cmd = new SqlCommand(consulta, cn);
            SqlDataReader dr;
            try
            {
                dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    existe = true;
                }
            }
            catch
            {
                existe = false;
            }
            finally
            {
                cn.Close();
            }
            return existe;
        }

        public bool Insertar()
        {
            bool insert = true;
            Accesoadatos datos = new Accesoadatos();
            SqlConnection cn = new SqlConnection(datos.getruta());
            cn.Open();
            SqlCommand cmd = new SqlCommand();
            //DEFINO EL COMANDO COMO TEXTO:
            cmd.CommandType = System.Data.CommandType.Text;
            //DEFINO LA SENTENCIA SQL:
            cmd.CommandText = "INSERT personas (tipodocumento,documento,nombre,apellido,direccion,codigopostal,telefono,email,fechanacimiento,codigonacionalidad,codigonivelestudio) values (@tipodocumento, @documento, @nombre, @apellido, @direccion, @codigopostal, @telefono, @email, @fechanacimiento, @codigonacionalidad, @codigonivelestudio)";
            //DEFINO LOS PARÁMETROS:
            cmd.Parameters.AddWithValue("@tipodocumento", this.TipoDocumento);
            cmd.Parameters.AddWithValue("@documento", this.Documento);
            cmd.Parameters.AddWithValue("@nombre", this.Nombre);
            cmd.Parameters.AddWithValue("@apellido", this.Apellido);
            cmd.Parameters.AddWithValue("@direccion", this.Direccion);
            cmd.Parameters.AddWithValue("@codigopostal", this.CodigoPostal);
            cmd.Parameters.AddWithValue("@telefono", this.Telefono);
            cmd.Parameters.AddWithValue("@email", this.Email);
            cmd.Parameters.AddWithValue("@fechanacimiento", this.FechaNacimiento);
            cmd.Parameters.AddWithValue("@codigonacionalidad", this.CodigoNacionalidad);
            cmd.Parameters.AddWithValue("@codigonivelestudio", this.CodigoNivelEstudio);
            cmd.Connection = cn;
            //COMIENZA LA EJECUCIÓN DEL COMANDO:
            try
            {
                cmd.ExecuteNonQuery();
            }
            catch
            {
                insert = false;
            }
            finally
            {
                cn.Close();
            }
            return insert;
        }

        public void ObtenerTablaPersonaPorDocumento(ref DataTable p, string cod, string doc)
        {
            Accesoadatos datos = new Accesoadatos();
            SqlConnection cn = new SqlConnection();
            SqlDataAdapter adapt = new SqlDataAdapter();
            cn = datos.ObtenerConexion(datos.getruta());
            adapt = datos.ObtenerAdaptador("Select * from personas where (tipodocumento = '" + cod + "') and (documento = '" + doc + "')", cn);
            adapt.Fill(p);
        }

        public void ObtenerPersonaDesdeDatatable(ref Persona p, DataTable dt)
        {
            p.TipoDocumento = dt.Rows[0][0].ToString();
            p.Documento = dt.Rows[0][1].ToString();
            p.Nombre = dt.Rows[0][2].ToString();
            p.Apellido = dt.Rows[0][3].ToString();
            p.Direccion = dt.Rows[0][4].ToString();
            p.CodigoPostal = dt.Rows[0][5].ToString();
            p.Telefono = dt.Rows[0][6].ToString();
            p.Email = dt.Rows[0][7].ToString();
            p.FechaNacimiento = Convert.ToDateTime(dt.Rows[0][8]);
            p.CodigoNacionalidad = dt.Rows[0][9].ToString();
            p.CodigoNivelEstudio = dt.Rows[0][10].ToString();
        }

        public bool Eliminar()
        {
            bool elim = true;
            Accesoadatos datos = new Accesoadatos();
            SqlConnection cn = new SqlConnection(datos.getruta());
            cn.Open();
            SqlCommand cmd = new SqlCommand();
            //DEFINO EL COMANDO COMO TEXTO:
            cmd.CommandType = System.Data.CommandType.Text;
            //DEFINO LA SENTENCIA SQL:
            cmd.CommandText = "DELETE from personas where (tipodocumento = @tipodocumento) and (documento = @documento)";
            //DEFINO LOS PARÁMETROS:
            cmd.Parameters.AddWithValue("@tipodocumento", this.TipoDocumento);
            cmd.Parameters.AddWithValue("@documento", this.Documento);
            cmd.Connection = cn;
            //COMIENZA LA EJECUCIÓN DEL COMANDO:
            try
            {
                cmd.ExecuteNonQuery();
            }
            catch
            {
                elim = false;
            }
            finally
            {
                cn.Close();
            }
            return elim;
        }

        public bool Modificar()
        {
            bool modif = true;
            Accesoadatos datos = new Accesoadatos();
            SqlConnection cn = new SqlConnection(datos.getruta());
            cn.Open();
            SqlCommand cmd = new SqlCommand();
            //DEFINO EL COMANDO COMO TEXTO:
            cmd.CommandType = System.Data.CommandType.Text;
            //DEFINO LA SENTENCIA SQL:
            cmd.CommandText = "UPDATE personas SET (nombre = @nombre, apellido = @apellido, direccion = @direccion, codigopostal = @codigopostal, telefono = @telefono, email = @email, fechanacimiento = @fechanacimiento, codigonacionalidad = @codigonacionalidad, codigonivelestudio = @codigonivelestudio) where (tipodocumento = @tipodocumento) and (documento = @documento)";
            //DEFINO LOS PARÁMETROS:
            cmd.Parameters.AddWithValue("@tipodocumento", this.TipoDocumento);
            cmd.Parameters.AddWithValue("@documento", this.Documento);
            cmd.Parameters.AddWithValue("@nombre", this.Nombre);
            cmd.Parameters.AddWithValue("@apellido", this.Apellido);
            cmd.Parameters.AddWithValue("@direccion", this.Direccion);
            cmd.Parameters.AddWithValue("@codigopostal", this.CodigoPostal);
            cmd.Parameters.AddWithValue("@telefono", this.Telefono);
            cmd.Parameters.AddWithValue("@email", this.Email);
            cmd.Parameters.AddWithValue("@fechanacimiento", this.FechaNacimiento);
            cmd.Parameters.AddWithValue("@codigonacionalidad", this.CodigoNacionalidad);
            cmd.Parameters.AddWithValue("@codigonivelestudio", this.CodigoNivelEstudio);
            cmd.Connection = cn;
            //COMIENZA LA EJECUCIÓN DEL COMANDO:
            try
            {
                cmd.ExecuteNonQuery();
            }
            catch
            {
                modif = false;
            }
            finally
            {
                cn.Close();
            }
            return modif;
        }

        public void ObtenerTodasLasPersonas(ref DataTable p)
        {
            Accesoadatos datos = new Accesoadatos();
            SqlConnection cn = new SqlConnection();
            SqlDataAdapter adapt = new SqlDataAdapter();
            cn = datos.ObtenerConexion(datos.getruta());
            adapt = datos.ObtenerAdaptador("Select * from personas", cn);
            adapt.Fill(p);
        }

    }//FIN DE LA CLASE PERSONA
}//FIN NAMESPACE
